package date_202405

//219. 存在重复元素 II
//简单
//相关标签
//相关企业
//给你一个整数数组 nums 和一个整数 k ，判断数组中是否存在两个 不同的索引 i 和 j ，满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在，返回 true ；否则，返回 false 。
//
//
//
//示例 1：
//
//输入：nums = [1,2,3,1], k = 3
//输出：true
//示例 2：
//
//输入：nums = [1,0,1,1], k = 1
//输出：true
//示例 3：
//
//输入：nums = [1,2,3,1,2,3], k = 2
//输出：false
//
//
//
//
//提示：
//
//1 <= nums.length <= 105
//-109 <= nums[i] <= 109
//0 <= k <= 105

func containsNearbyDuplicate(nums []int, k int) bool {
	if k == 0 {
		return false
	}

	left := 0
	right := 0
	window := make(map[int]struct{}, k)
	for right < len(nums) {
		_, rightExist := window[nums[right]]
		if rightExist {
			return true
		}
		window[nums[right]] = struct{}{}
		if len(window) > k {
			delete(window, nums[left])
			left++
		}
		right++
	}
	return false
}
